package net.feixiang.creational.factoryMethod.contrary;

import net.feixiang.creational.factoryMethod.Logger;
import net.feixiang.creational.factoryMethod.ConsoleLogger;
import net.feixiang.creational.factoryMethod.DatabaseLogger;
import net.feixiang.creational.factoryMethod.FileLogger;

/**
 * 不符合开闭原则的工厂方法模式示例：直接依赖具体类，增加新日志类型需要修改现有代码。
 *
 * @see <a href="https://www.feixiang.net/Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%AC%AC%E4%B8%80%E7%AB%A0%E3%80%81%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/12.html">工厂方法模式</a>
 * @author 飞翔
 */
public class NonOpenClosedPrincipleDemo {
    public static void main(String[] args) {
        // 直接依赖具体类
        Logger logger;
        String type = "console";
        if ("console".equals(type)) {
            // 实例化控制台日志类
            logger = new ConsoleLogger();
        } else if ("database".equals(type)) {
            // 实例化数据库日志类
            logger = new DatabaseLogger();
        } else if ("file".equals(type)) {
            // 实例化文件日志类
            logger = new FileLogger();
        } else {
            throw new IllegalArgumentException("无效日志类型: " + type);
        }
        // 增加其它日志类型需要在这里继续用else if，耦合性高
    }
}
